package com.gjzhao.fammll.service.impl;

import com.gjzhao.fammll.service.MessageService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @Description: 短信处理 ServiceImpl
 * @Author: gjzhao
 * @Date Created in 2022-02-19 2:44 下午
 */
@Service
public class MessageServiceImpl implements MessageService {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    private AmqpTemplate amqpTemplate; //rabbitmq是基于amqp协议的


    /**
     * 发送消息到消息队列(交换机、队列已经存在)
     *
     * @param message
     */
    @Override
    public void sendMessage(String message) {

        logger.info("----需要发送到消息队列的消息:{}----", message);

        //amqpTemplate.convertAndSend("messageQueue", message); //简单模式/工作模式(没有交换机，但是消息只能消费一次)
        //amqpTemplate.convertAndSend("messageExchange", "", message); //订阅模式(交换机的类型为fanout)

        amqpTemplate.convertAndSend("messageExchange", "k1", message); //路由模式，需要指定key(交换机的类型为direct)

        logger.info("----发送消息到消息队列完成！----", message);

    }

    /**
     * 发送消息(交换机、队列不存在)
     *
     * @param message
     */
    @Override
    public void sendMessageByInitExchangeAndQueue(String message) {

        logger.info("----需要发送到消息队列的消息:{}----", message);

        //路由模式，需要指定key(交换机的类型为direct)
        amqpTemplate.convertAndSend("msgExchange2", "k1", message);

        logger.info("----发送消息到消息队列完成！----", message);
    }
}
